var express = require('express');
var router = express.Router();
var xlsx = require('node-xlsx');
var uuid = require('node-uuid'); // 引入 唯一的uuid
var Pro = require('./../sql/col/products'); // 产品的集合
// var sql = require('./../sql'); // 引入数据库操作模块
// var sql = require('./../sql/index'); // 引入数据库操作模块
var sql = require('./../sql/index.js'); // 引入数据库操作模块

/* GET users listing. */

/**
 * @api {get} api/product 获取产品数据
 * @apiDescription 获取产品数据，可以传递不同的参数以获取数据
 * @apiGroup 产品接口
 * @apiParam { number } limit 每页显示个数（默认值10）
 * @apiParam { number } count 页码（默认值0
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '200',
 *  message: '获取产品列表数据',
 *  data: []
 * }
 * @apiSampleRequest /api/product
 * @apiVersion 1.0.0
 */
router.get('/', function(req, res, next) {
  // 不管是get还是post 获取到的参数都是字符串，需要转换
  let limit = req.query.limit * 1
  let count = req.query.count * 1 || 0

  sql.paging(Pro, {}, { _id: 0 }, limit, count).then((data) => {
    res.send({
      code: '200',
      message: '获取产品列表数据',
      len: data.length, // 告诉用户请求了多少条数据
      data: data
    });
  })
  
});

router.get('/upload', function(req, res, next) {
  // 1.获取excel的绝对地址
  let fileStr = 'D:/Users/Desktop/fly-node/shop.xlsx';
  // 2.解析这个文件 - 输出为对象
  let fileData = xlsx.parse(fileStr)
  // res.send(fileData)
  // [ {name: '', data: []}, {name: '', data: []}]
  // 3.获取对应的表格中的数据 --- 依据excel表格中的数据的顺序
  let proarr = fileData[0].data
  // res.send(proarr)
  /**
   * [
   *  [表头1， 表头2， 表头3....],
   *  [数据1， 数据2， 数据3....]
   * ]
   */
  // 4.遍历数据，组合数据
  let arr = []
  proarr.map((item, index) => {
    if (index > 0) { // 去头
      let obj = {
        proid: 'pro_' + uuid.v1(), // 产品的谓一值
        proimg: item[0],
        name: item[1],
        desc: item[2],
        price: item[3] * 1,
        origin_price: item[4] * 1,
        detailHTML: item[5],
        detailimg: item[6],
        type: item[7],
        keyword: item[8],
        hot: item[9] * 1,
        sales: item[10] * 1,
        stock: item[11] * 1,
        rating: item[12] * 1
      }
     
      arr.push(obj)
    }
  })
  // res.send(arr)
  // 5.插入数据库
  sql.insert(Pro, arr).then(() => {
    res.send('插入数据成功')
  })
  // res.send('上传产品');
});


/**
 * @api {get} api/product/detail 获取产品的详情数据
 * @apiDescription 获取产品的详情数据
 * @apiGroup 产品接口
 * @apiParam { string } proid 产品id
 * @apiSuccessExample { json } Success-Response:
 *  {
 *    code: '200',
 *    message: '获取详情的数据',
 *    data: data[0]
 *  }
 *  {
 *    code: '10404', // 10404 状态码自己编辑，随便设定
 *    message: '没有查询到该产品相关数据'
 *  }
 * @apiSampleRequest /api/product/detail
 * @apiVersion 1.0.0
 */
router.get('/detail', (req, res, next) => {
  // 1. 获取产品的唯一值参数
  const { proid } = req.query; // es6解构赋值
  // 2.依据 proid 查询数据库
  sql.find(Pro, { proid }, { _id: 0 }).then(data => {
    // 3.判断有没有数据
    data.length > 0 ? res.send({
      code: '200',
      message: '获取详情的数据',
      data: data[0]
    }) : res.send({
      code: '10404', // 10404 状态码自己编辑，随便设定
      message: '没有查询到该产品相关数据'
    })
  })
})


/**
 * @api {get} api/product/insert 插入一条新的产品数据
 * @apiDescription 插入一条新的产品数据
 * @apiParam { string } proimg  产品图片
 * @apiParam { string } name   产品名称
 * @apiParam { string } desc    产品描述
 * @apiParam { number } price   产品价格
 * @apiParam { number } origin_price   产品原始价格
 * @apiParam { string } type    类型
 * @apiParam { string } keyword 关键词
 * @apiParam { number } hot   是否为热推
 * @apiParam { number } sales  销量
 * @apiParam { number } stock  库存
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '200',
 *  message: '插入成功'
 * }
 * @apiSampleRequest /api/product/insert
 * @apiGroup 产品接口
 * @apiVersion 1.1.0
 **/
router.get('/insert', function(req, res, next) {
  let proid='pro_'+uuid.v1()
  let proimg=req.query.proimg
  let name=req.query.name
  let desc=req.query.desc
  let price=req.query.price*1
  let origin_price=req.query.origin_price*1
  let type=req.query.type
  let keyword=req.query.keyword
  let hot=req.query.hot*1
  let sales=req.query.sales*1
  let stock=req.query.stock*1
  let arr=[]
  let obj={
    proid:proid,//产品唯一值
    proimg:proimg,// 产品图片
    name:name,//产品名称
    desc:desc,//产品描述
    price:price,//价格
    origin_price:origin_price,//原始价格
    type:type,//产品类型
    keyword:keyword,//关键词
    hot:hot,//热推
    sales:sales,//销量
    stock:stock,//库存
  }
  arr.push(obj)
  sql.insert(Pro,arr).then(()=>{
     res.send({
       code:'200',
       message:'插入成功'
     })     
  })
});
module.exports = router;
